package com.autumn.zero.authorization.application.services;

import java.util.List;

import com.autumn.zero.application.services.IZeroEditAppService;
import com.autumn.zero.authorization.application.dto.PermissionDto;
import com.autumn.zero.authorization.application.dto.PermissionGrantedInput;
import com.autumn.zero.authorization.application.dto.modules.ResourcesTypeInput;
import com.autumn.zero.authorization.application.dto.users.ResetPasswordInput;
import com.autumn.zero.authorization.application.dto.users.UserDetailsOutput;
import com.autumn.zero.authorization.application.dto.users.UserInput;
import com.autumn.zero.authorization.application.dto.users.UserOutput;
import com.autumn.zero.authorization.application.dto.users.UserPermissionOutput;
import com.autumn.zero.authorization.values.ResourcesModulePermissionTreeValue;
import com.autumn.zero.authorization.values.ResourcesModuleTreeValue;

/**
 * 用户应服务服务
 * 
 * @author 杨昌国 2018-12-10 15:42:03
 */
public interface IUserAppService
		extends IZeroEditAppService<Long, UserInput, UserInput, UserDetailsOutput, UserOutput> {

	/**
	 * 重置密码
	 * @param input 输入
	 */
	void resetPassword(ResetPasswordInput input);
	
	/**
	 * 授权
	 * 
	 * @param input 输入
	 * @return
	 */
	UserPermissionOutput authorize(PermissionGrantedInput input);

	/**
	 * 授权查询
	 * 
	 * @param input 输入
	 * @return
	 */
	UserPermissionOutput authorizeByQuery(PermissionDto input);

	/**
	 * 用户授权模块权限树
	 * 
	 * @param input 输入
	 * @return
	 */
	List<ResourcesModulePermissionTreeValue> authorizeByModulePermissionTree(PermissionDto input);
	
	/**
	 * 查询用户菜单树
	 * 
	 * @param input 输入
	 * @return
	 */
	List<ResourcesModuleTreeValue> queryUserByMenuTree(ResourcesTypeInput input);
	
	/**
	 * 用户授权模板所有权限
	 * 
	 * @param input
	 *            输入
	 * @return
	 */
	void authorizeByAllPermission(PermissionDto input);
	
	
}
